<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>面向切面</title>
	</head>
	<body>
		<script>
			Function.prototype.before = function(callback) {
				const __self__ = this;
				// 不能使用箭头函数，要保证 返回的this指向的是 调用者
				return function() {
					callback.apply(__self__, arguments);
					return __self__.apply(__self__, arguments);
				};
			};
			Function.prototype.after = function(callback) {
				const __self__ = this;
				// 不能使用箭头函数，要保证 返回的this指向的是 调用者
				return function() {
					let result = __self__.apply(__self__, arguments);
					callback.apply(__self__, arguments);
					return result;
				};
			};
			
			function test(a, b, c) {
				console.log("test exe", a, b, c);
				return "return value";
			};
			let res = test.before(() => {
				console.log("before");
			}).after(() => {
				console.log("after");
			})(1,2,[3,4]);
			console.log(res);
		</script>
	</body>
</html>